package com.elka.wdec.utils;

/**
 * Zbior funkcji wykorzystywanych w calym projekcie
 * @author michand
 */
public class Funkcje {
    public static int[] pieniadzeNaReklame(int gotowka) {
        int[] pieniadzeNaReklame = new int[3];

        //podzial: 60% TV, 25% internet, 15% prasa
        pieniadzeNaReklame[0] = (int)(0.6 * gotowka);
        pieniadzeNaReklame[1] = (int)(0.25 * gotowka);
        pieniadzeNaReklame[2] = (int)(0.15 * gotowka);

        return pieniadzeNaReklame;
    }

    /*
    public static double kosztJednostkowy(int wolumen, int jakosc) {
        double kosztJednostkowy = 0.0;

        //wzor na koszt jednostkowy produktu w zaleznosci od wolumenu i jakosci

        return kosztJednostkowy;
    }
     * 
     */

    public static double pobieranyKredyt(Etap aktualnyEtap, double ryzyko) {
        double pobieranyKredyt = 0.0;

        //w ostatnim etapie nie bierzemy kredytu
        if(aktualnyEtap.getNumerEtapu() == 4) {
            return 0.0;
        }


        return pobieranyKredyt;
    }

    public static double rataKredytu(Etap aktualnyEtap) {
        int wartoscKredytu = aktualnyEtap.getAktualnyKredyt();

        double czescKapitalowa = wartoscKredytu / (6 - aktualnyEtap.getNumerEtapu());
        double czescOdsetkowa = wartoscKredytu * StanPoczatkowy.oprocentowanieKredytu;

        return czescKapitalowa + czescOdsetkowa;
    }

    public static double odsetkiOdOszczednosci(Etap aktualnyEtap) {
        long wolnaGotowka = aktualnyEtap.getIloscGotowki();
        return wolnaGotowka * StanPoczatkowy.oprocentowanieKonta;
    }

    public static double podatekDochodowy(double przychod) {
        return przychod * StanPoczatkowy.podatek;
    }

    public static int cenaJednostkowa(double ryzyko) {
        int cenaJednostkowa = 0;
        
        //obliczanie ceny jednostkowej w zaleznosci od ?

        return cenaJednostkowa;
    }

    //ryzyko jest intem, zeby latwiej przechowac w kolekcji rozwiazan
    public static int ryzyko(Rozwiazanie rozwiazanie) {
 
        //((cena/2)^3-(jakość/10)^3)/2.000-reklama/3.000.000
        double r = ((Math.pow(rozwiazanie.getCena() * 0.5, 3) - Math.pow(rozwiazanie.getJakosc() * 0.2, 3)) / 2000.0 - rozwiazanie.getReklama()/5000000.0);
        int ryzyko = (int)(r * 100);

        if(ryzyko > 100)
            return 100;
        else if(ryzyko < 0)
            return 0;
        
        return ryzyko;
    }

    public static double zysk(Rozwiazanie rozwiazanie) {
        double zysk = 0;

        zysk = rozwiazanie.getWolumen() * rozwiazanie.getCena() - rozwiazanie.getWolumen() * rozwiazanie.getKosztJednostkowy() - rozwiazanie.getReklama();
        zysk = zysk - rozwiazanie.getKredyt() * StanPoczatkowy.getOprocentowanieKredytu();

        return zysk;
    }
}
